package com.huaishushu.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.huaishushu.dto.DishDto;
import com.huaishushu.dto.SetmealDto;
import com.huaishushu.entity.Setmeal;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 套餐 服务类
 * </p>
 *
 * @author ChiBaoBaoHuaiShuShu
 * @since 2023-05-28
 */
public interface ISetmealService extends IService<Setmeal> {

    /**
     * 添加套餐信息
     * 操作两张表，setmeal_dish和setmeal表
     * @param setmealDto
     * @return
     */
    void saverWithDish(SetmealDto setmealDto);

    /**
     * 菜品信息分页查询
     * @param page
     * @param pageSize
     * @param name
     * @return
     */
    Page<SetmealDto> page(Integer page, Integer pageSize, String name);

    /**
     * 根据id数组来批量删除套餐信息
     * @param ids
     */
    void delete(String[] ids);

    /**
     * 根据套餐id来查询套餐的基本信息以及套餐所对应的菜品信息
     * @param setmealId
     * @return
     */
    SetmealDto getByIdWithDish(Long setmealId);

    /**
     * 修改套餐信息，操作的是两张表，还需要插入菜品信息
     * @param setmealDto
     * @return
     */
    void updateWithDish(SetmealDto setmealDto);

    /**
     * 根据传递回来的status来判断是启用还是修改操作
     * 之后根据id来批量修改
     * @param status
     * @param ids
     * @return
     */
    void updateStatusById(Integer status, String[] ids);

    /**
     * 展示前台的套餐中的所有套餐信息以及套餐中对应的菜品信息。
     * 此处返回值类型是List<Setmeal>也是可以的，但是我写成这样的目的是因为方便以后扩展做准备，套餐管理页面显示所有套餐信息以及套餐所对应的菜品信息。
     * @param setmeal
     * @return
     */
    List<SetmealDto> listSetmealDto(Setmeal setmeal);

    /**
     * 前台查看套餐信息中的菜品信息
     * 根据套餐id来查询菜品的信息
     * @param setmealId
     * @return
     */
    List<DishDto> getListDishDtoById(Long setmealId);
}
